1 casillas_por_diag_por_m
= lambda m
:\
2 (lambda k
:k
+1 if k
< m
else 2*m
-k
-1)
5 filas_negras
= range(0,2*n
-1,2) #son filas si giramos el tablero 45 grados
6 filas_blancas
= range(1,2*n
-1,2)
7 casillas_por_diag
= casillas_por_diag_por_m(n
)
8 filas_negras
.sort(cmp=lambda x
,y
: -1 if casillas_por_diag(x
) < casillas_por_diag(y
) else \
9 1 if casillas_por_diag(x
) > casillas_por_diag(y
) else 0)
10 filas_blancas
.sort(cmp=lambda x
,y
: -1 if casillas_por_diag(x
) < casillas_por_diag(y
) else \
11 1 if casillas_por_diag(x
) > casillas_por_diag(y
) else 0)
12 # Memorizacion de resultados
13 mem_negras
=[[None for t
in xrange(k
+1)] for y
in xrange(n
+1)]
14 mem_blancas
=[[None for t
in xrange(k
+1)] for y
in xrange(n
+1)]
16 #inicializamos las tables
21 for j
in xrange(1,k
+1):
29 acum
+= contar(n
,t
,filas_negras
,mem_negras
,casillas_por_diag
)*contar(n
-1,k
-t
,filas_blancas
,mem_blancas
,casillas_por_diag
)
32 acum
+= contar(n
,t
,filas_negras
,mem_negras
,casillas_por_diag
)*contar(n
,k
-t
,filas_negras
,mem_negras
,casillas_por_diag
)
35 def contar(i
,j
,fs
,mem
,map):
37 aux
= contar(i
-1,j
-1,fs
,mem
,map)
38 aux2
=map(fs
[i
-1])-(j
-1)
40 mem
[i
][j
] += contar(i
-1,j
,fs
,mem
,map)